package com.yunji.framework_template.common.util;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class CountryCodeByCountryCodePhone {

    private static final Logger             logger      = Logger.getLogger(CountryCodeByCountryCodePhone.class);

    public static final String              imsiToCodes = "[{'phone_country_code':376,'country_code':'AD'},{'phone_country_code':971,'country_code':'AE'},{'phone_country_code':93,'country_code':'AF'},{'phone_country_code':1268,'country_code':'AG'},{'phone_country_code':1264,'country_code':'AI'},{'phone_country_code':355,'country_code':'AL'},{'phone_country_code':374,'country_code':'AM'},{'phone_country_code':244,'country_code':'AO'},{'phone_country_code':54,'country_code':'AR'},{'phone_country_code':43,'country_code':'AT'},{'phone_country_code':61,'country_code':'AU'},{'phone_country_code':994,'country_code':'AZ'},{'phone_country_code':1246,'country_code':'BB'},{'phone_country_code':880,'country_code':'BD'},{'phone_country_code':32,'country_code':'BE'},{'phone_country_code':226,'country_code':'BF'},{'phone_country_code':359,'country_code':'BG'},{'phone_country_code':973,'country_code':'BH'},{'phone_country_code':257,'country_code':'BI'},{'phone_country_code':229,'country_code':'BJ'},{'phone_country_code':970,'country_code':'BL'},{'phone_country_code':1441,'country_code':'BM'},{'phone_country_code':673,'country_code':'BN'},{'phone_country_code':591,'country_code':'BO'},{'phone_country_code':55,'country_code':'BR'},{'phone_country_code':1242,'country_code':'BS'},{'phone_country_code':267,'country_code':'BW'},{'phone_country_code':375,'country_code':'BY'},{'phone_country_code':501,'country_code':'BZ'},{'phone_country_code':1,'country_code':'CA'},{'phone_country_code':236,'country_code':'CF'},{'phone_country_code':242,'country_code':'CG'},{'phone_country_code':41,'country_code':'CH'},{'phone_country_code':682,'country_code':'CK'},{'phone_country_code':56,'country_code':'CL'},{'phone_country_code':237,'country_code':'CM'},{'phone_country_code':86,'country_code':'CN'},{'phone_country_code':57,'country_code':'CO'},{'phone_country_code':506,'country_code':'CR'},{'phone_country_code':420,'country_code':'CS'},{'phone_country_code':53,'country_code':'CU'},{'phone_country_code':357,'country_code':'CY'},{'phone_country_code':420,'country_code':'CZ'},{'phone_country_code':49,'country_code':'DE'},{'phone_country_code':253,'country_code':'DJ'},{'phone_country_code':45,'country_code':'DK'},{'phone_country_code':1890,'country_code':'DO'},{'phone_country_code':213,'country_code':'DZ'},{'phone_country_code':593,'country_code':'EC'},{'phone_country_code':372,'country_code':'EE'},{'phone_country_code':20,'country_code':'EG'},{'phone_country_code':34,'country_code':'ES'},{'phone_country_code':251,'country_code':'ET'},{'phone_country_code':358,'country_code':'FI'},{'phone_country_code':679,'country_code':'FJ'},{'phone_country_code':33,'country_code':'FR'},{'phone_country_code':241,'country_code':'GA'},{'phone_country_code':44,'country_code':'GB'},{'phone_country_code':1809,'country_code':'GD'},{'phone_country_code':995,'country_code':'GE'},{'phone_country_code':594,'country_code':'GF'},{'phone_country_code':233,'country_code':'GH'},{'phone_country_code':350,'country_code':'GI'},{'phone_country_code':220,'country_code':'GM'},{'phone_country_code':224,'country_code':'GN'},{'phone_country_code':30,'country_code':'GR'},{'phone_country_code':502,'country_code':'GT'},{'phone_country_code':1671,'country_code':'GU'},{'phone_country_code':592,'country_code':'GY'},{'phone_country_code':852,'country_code':'HK'},{'phone_country_code':504,'country_code':'HN'},{'phone_country_code':509,'country_code':'HT'},{'phone_country_code':36,'country_code':'HU'},{'phone_country_code':62,'country_code':'ID'},{'phone_country_code':353,'country_code':'IE'},{'phone_country_code':972,'country_code':'IL'},{'phone_country_code':91,'country_code':'IN'},{'phone_country_code':964,'country_code':'IQ'},{'phone_country_code':98,'country_code':'IR'},{'phone_country_code':354,'country_code':'IS'},{'phone_country_code':39,'country_code':'IT'},{'phone_country_code':1876,'country_code':'JM'},{'phone_country_code':962,'country_code':'JO'},{'phone_country_code':81,'country_code':'JP'},{'phone_country_code':254,'country_code':'KE'},{'phone_country_code':331,'country_code':'KG'},{'phone_country_code':855,'country_code':'KH'},{'phone_country_code':850,'country_code':'KP'},{'phone_country_code':82,'country_code':'KR'},{'phone_country_code':225,'country_code':'CI'},{'phone_country_code':965,'country_code':'KW'},{'phone_country_code':327,'country_code':'KZ'},{'phone_country_code':856,'country_code':'LA'},{'phone_country_code':961,'country_code':'LB'},{'phone_country_code':1758,'country_code':'LC'},{'phone_country_code':423,'country_code':'LI'},{'phone_country_code':94,'country_code':'LK'},{'phone_country_code':231,'country_code':'LR'},{'phone_country_code':266,'country_code':'LS'},{'phone_country_code':370,'country_code':'LT'},{'phone_country_code':352,'country_code':'LU'},{'phone_country_code':371,'country_code':'LV'},{'phone_country_code':218,'country_code':'LY'},{'phone_country_code':212,'country_code':'MA'},{'phone_country_code':377,'country_code':'MC'},{'phone_country_code':373,'country_code':'MD'},{'phone_country_code':261,'country_code':'MG'},{'phone_country_code':223,'country_code':'ML'},{'phone_country_code':95,'country_code':'MM'},{'phone_country_code':976,'country_code':'MN'},{'phone_country_code':853,'country_code':'MO'},{'phone_country_code':1664,'country_code':'MS'},{'phone_country_code':356,'country_code':'MT'},{'phone_country_code':230,'country_code':'MU'},{'phone_country_code':960,'country_code':'MV'},{'phone_country_code':265,'country_code':'MW'},{'phone_country_code':52,'country_code':'MX'},{'phone_country_code':60,'country_code':'MY'},{'phone_country_code':258,'country_code':'MZ'},{'phone_country_code':264,'country_code':'NA'},{'phone_country_code':977,'country_code':'NE'},{'phone_country_code':234,'country_code':'NG'},{'phone_country_code':505,'country_code':'NI'},{'phone_country_code':31,'country_code':'NL'},{'phone_country_code':47,'country_code':'NO'},{'phone_country_code':977,'country_code':'NP'},{'phone_country_code':674,'country_code':'NR'},{'phone_country_code':64,'country_code':'NZ'},{'phone_country_code':968,'country_code':'OM'},{'phone_country_code':507,'country_code':'PA'},{'phone_country_code':51,'country_code':'PE'},{'phone_country_code':689,'country_code':'PF'},{'phone_country_code':675,'country_code':'PG'},{'phone_country_code':63,'country_code':'PH'},{'phone_country_code':92,'country_code':'PK'},{'phone_country_code':48,'country_code':'PL'},{'phone_country_code':1787,'country_code':'PR'},{'phone_country_code':351,'country_code':'PT'},{'phone_country_code':595,'country_code':'PY'},{'phone_country_code':974,'country_code':'QA'},{'phone_country_code':40,'country_code':'RO'},{'phone_country_code':7,'country_code':'RU'},{'phone_country_code':966,'country_code':'SA'},{'phone_country_code':677,'country_code':'SB'},{'phone_country_code':248,'country_code':'SC'},{'phone_country_code':249,'country_code':'SD'},{'phone_country_code':46,'country_code':'SE'},{'phone_country_code':65,'country_code':'SG'},{'phone_country_code':386,'country_code':'SI'},{'phone_country_code':421,'country_code':'SK'},{'phone_country_code':232,'country_code':'SL'},{'phone_country_code':378,'country_code':'SM'},{'phone_country_code':221,'country_code':'SN'},{'phone_country_code':252,'country_code':'SO'},{'phone_country_code':597,'country_code':'SR'},{'phone_country_code':239,'country_code':'ST'},{'phone_country_code':503,'country_code':'SV'},{'phone_country_code':963,'country_code':'SY'},{'phone_country_code':268,'country_code':'SZ'},{'phone_country_code':235,'country_code':'TD'},{'phone_country_code':228,'country_code':'TG'},{'phone_country_code':66,'country_code':'TH'},{'phone_country_code':992,'country_code':'TJ'},{'phone_country_code':993,'country_code':'TM'},{'phone_country_code':216,'country_code':'TN'},{'phone_country_code':676,'country_code':'TO'},{'phone_country_code':90,'country_code':'TR'},{'phone_country_code':1809,'country_code':'TT'},{'phone_country_code':886,'country_code':'TW'},{'phone_country_code':255,'country_code':'TZ'},{'phone_country_code':380,'country_code':'UA'},{'phone_country_code':256,'country_code':'UG'},{'phone_country_code':1,'country_code':'US'},{'phone_country_code':598,'country_code':'UY'},{'phone_country_code':233,'country_code':'UZ'},{'phone_country_code':1784,'country_code':'VC'},{'phone_country_code':58,'country_code':'VE'},{'phone_country_code':84,'country_code':'VN'},{'phone_country_code':967,'country_code':'YE'},{'phone_country_code':381,'country_code':'YU'},{'phone_country_code':27,'country_code':'ZA'},{'phone_country_code':260,'country_code':'ZM'},{'phone_country_code':243,'country_code':'ZR'},{'phone_country_code':263,'country_code':'ZW'}]";
    public static final Map<String, String> map         = new HashMap<String, String>();

    public static String getCounrtyCode(String phoneCountryCode) {
        try {
            if (map.size() == 0) {
                synchronized (map) {
                    JSONArray jsonArray = JSONArray.parseArray(imsiToCodes);
                    for (int i = 0; i < jsonArray.size(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        String phone_country_code = jsonObject.getString("phone_country_code");
                        String countryCode = jsonObject.getString("country_code").toString();
                        map.put(phone_country_code, countryCode);
                    }
                }
            }
            return map.get(phoneCountryCode);
        } catch (Exception e) {
            logger.error("通过手机国家码获取国码出现异常", e);
        }
        return null;
    }

}
